package main

import (
	"fmt"
	"time"
)

func main() {
	start := time.Now()
	fibonacci := fibonacci()
	for i := 0; i <= 50; i++ {
		fmt.Printf("fibonacci(%d) is: %d\n", i, fibonacci())
	}
	end := time.Now()
	delta := end.Sub(start)
	fmt.Printf("closure took this amount of time: %s\n", delta)
}

// 斐波那契数列,通过闭包实现
/*
闭包实现通过 迭代 的方式，避免了重复计算子问题。每次调用生成器函数时，只需更新两个变量 a 和 b，从而计算出下一个斐波那契数。
*/
func fibonacci() func() int {
	a, b := 0, 1
	return func() int {
		a, b = b, a+b
		return a
	}
}
